diff --git a/django/contrib/admin/sites.py b/django/contrib/admin/sites.py
index 837dabfea8..433aa06241 100644
--- a/django/contrib/admin/sites.py
+++ b/django/contrib/admin/sites.py
@@ -430,7 +430,7 @@ class AdminSite:
                     return HttpResponsePermanentRedirect(path)
         raise Http404
 
-    def _build_app_dict(self, request, label=None):
+    def build_app_dict(self, request, label=None):
         """
         Build the app dictionary. The optional `label` parameter filters models
         of a specific app.
@@ -479,6 +479,8 @@ class AdminSite:
                 except NoReverseMatch:
                     pass
 
+            model_dict['model'] = model
+
             if app_label in app_dict:
                 app_dict[app_label]['models'].append(model_dict)
             else:
@@ -503,7 +505,7 @@ class AdminSite:
         Return a sorted list of all the installed apps that have been
         registered in this site.
         """
-        app_dict = self._build_app_dict(request)
+        app_dict = self.build_app_dict(request)
 
         # Sort the apps alphabetically.
         app_list = sorted(app_dict.values(), key=lambda x: x['name'].lower())
@@ -534,7 +536,7 @@ class AdminSite:
         return TemplateResponse(request, self.index_template or 'admin/index.html', context)
 
     def app_index(self, request, app_label, extra_context=None):
-        app_dict = self._build_app_dict(request, app_label)
+        app_dict = self.build_app_dict(request, app_label)
         if not app_dict:
             raise Http404('The requested admin page does not exist.')
         # Sort the models alphabetically within each app.
